package com.jiazhong;

import java.util.Arrays;

public class QuickSort {
    public static void main(String[] args) {
        int[] nums = {10,2,23,53,34,21,43,56,76,54};
        System.out.println("排序前nums:"+ Arrays.toString(nums));
        quickSort(nums,0,nums.length-1);
        System.out.println("排序后nums:"+ Arrays.toString(nums));
    }
    public static void quickSort(int[] nums, int start, int end){
        if(start>end) return;// 方法退出条件,指针相遇或错过
        int i,j,base;
        // 指定基准值和左右指针记录位置
        i=start;
        j=end;
        int temp=0;
        base=nums[start];
        //找位置并交换基准值左右数据·
        while (i<j){
            //右侧遍历
            while (i<j && nums[j]>=base) j--;
            //左侧遍历
            while (i<j && nums[i]<=base) i++;
            if(i<j){
                swap(nums,i,j);
            }
        }
        //当左右指针相遇，交换基准值位置
        swap(nums,start,i);
        //根据条件左侧递归遍历
        quickSort(nums,start,j-1);
        //根据条件右侧递归遍历
        quickSort(nums,j+1,end);
    }
    //交换方法
    public static void swap(int[] nums,int l,int r){
        int temp=nums[l];
        nums[l]=nums[r];
        nums[r]=temp;
    }
}